lexer grammar Lexico;

options {
  language = Java;
//  k = 2;
}

tokens {

}

@header {
    package practica5;
}

@members {
//    private ArrayList<String> errors = new ArrayList<String>();
//    public void displayRecognitionError(String[] tokenNames, RecognitionException e) {
//        String hdr = getErrorHeader(e);
//        String msg = getErrorMessage(e, tokenNames);
//        errors.add(hdr + " " + msg);
//    }
//    public ArrayList<String> getErrors() {
//        return errors;
//    }
     private ArrayList<RecognitionException> errors = new ArrayList<RecognitionException>();
     public ArrayList<RecognitionException> getErrors() {
        return errors;
     }
     @Override
     public void reportError (RecognitionException e) {
        String msg = getErrorMessage(e, getTokenNames());
        System.err.println(msg);
        errors.add(e);
     }
 
}

//SALTOLINEA: '\r\n';
BLANCO: (' '|'\t'|'\r\n'|'\n') {skip();};
fragment DIGITO: '0'..'9';
fragment LETRA: 'a'..'z'|'A'..'Z';
INT: 'int';
CHAR: 'char';
VOID: 'void';
RET: 'return';
MAIN: 'main';
PRINTF: 'printf';
NUMERO: (DIGITO)+('.'(DIGITO)+)?;
IDENT: LETRA(LETRA|DIGITO)*;
OR: '|';
AND: '&';
IGUAL: '=';
COMILLAS: '"';
PARENTESIS_A: '(';
PARENTESIS_C: ')';
CORCHETE_A: '[';
CORCHETE_C: ']';
ASTERISCO: '*';
GUION: '-';
LLAVE_A: '{';
LLAVE_C: '}';
PORCENTAJE: '%';
NUEVOBLOQUE: '%%';
COMA: ',';
PUNTO: '.';
PUNTO_COMA: ';';
COMENTARIO_A: '/*';
COMENTARIO_C: '*/';
SUMA: '+';
INCREMENTO: '++';
DECREMENTO: '--';
CORCHETES: CORCHETE_A (RANGO|NUMERO)? CORCHETE_C;
RANGO:(NUMERO GUION NUMERO)|(LETRA GUION LETRA)+;
CADENA: COMILLAS (options {greedy=false;}:.)* COMILLAS;
COMENTARIO: COMENTARIO_A (options {greedy=false;}:.)* COMENTARIO_C {skip();};